<?php

namespace app\controller;

use boss\Validator;
use app\model\Blog as BlogModel;

final class Blog
{
    /**
     * 博客首页
     */
    public function index()
    {
        $data = [];
        return view('blog/index', $data);
    }

    /**
     * 发表页面
     */
    public function create()
    {
        return view('blog/create');
    }

    /**
     * 显示内容页面
     */
    public function show()
    {

    }

    /**
     * 提交表单数据
     */
    public function submit()
    {
        if (!is_logined()) {
            return json('用户未登录');
        }

        if (!is_post()) {
            return json('请求方法不正确', 'error', 405);
        }

        // 获取表单数据
        $data = [
            'title'   => post(filter_all_html('title')),
            'content' => post(remove_xss('content')),
        ];

        // 验证表单数据
        $errors = self::validateFormData($data);
        if ($errors) {
            return json($errors);
        }

        return json('发表成功，扣除 1 金币', 'success');

        try {
            (new BlogModel())->store($data);
            return json('发表成功，扣除 1 金币', 'success');
        } catch (\Throwable $th) {
            throw new \Exception($th, 1);

            // return json($th->getMessage());
        }
    }

    /**
     * 表单数据验证
     *
     * @param array $data
     * @return string|null 错误消息或 null
     */
    private static function validateFormData(array $data): ?string
    {
        $rules  = [
            'title'   => ['string', '1,80',   '标题应为 1-80 个字符'],
            'content' => ['string', '1,2000', '内容应为 1-2000 个字符'],
        ];

        $validate = new Validator($data, $rules, true);

        if (!$validate->check()) {
            return $validate->error;
        }

        return null;  // 无错误
    }
}
